from django.db import models
from django.contrib.auth.models import User
# Create your models here.
from appinput.models import App
from envx.models import Env
from public.models import CommonInfo


class Server(CommonInfo):
    """
    服务器
    """
    ip_address = models.CharField(max_length=24, verbose_name="IP 地址")
    # 用于定义这个服务器的Salt Minion的名称。不同公司对其命名规范是不一样的，所以独立出来
    salt_name = models.CharField(max_length=128, verbose_name="SaltStack minion")
    port = models.CharField(max_length=100, verbose_name="端口")
    app_name = models.ForeignKey(App, related_name='app_name', on_delete=models.CASCADE, verbose_name="应用名")
    env_name = models.ForeignKey(Env, blank=True, null=True, related_name="server_env_name", on_delete=models.CASCADE,
                                 verbose_name="环境")
    # 服务的应用有可能是以root启动的，也可能不是，所以独立出来
    app_user = models.CharField(max_length=24, blank=True, null=True, verbose_name="执行程序用户")
    # 记录谁进行了这个App记录的操作（创建和更新），便于追溯
    op_user = models.ForeignKey(User, blank=True, null=True, on_delete=models.CASCADE, verbose_name="操作用户")
    # 用于记录在此服务器上已经部署过多少个发布单，在历史记录和回滚时需要。
    history_deploy = models.CharField(max_length=512, blank=True, null=True, verbose_name="已部署版本")
    # 用于记录发布服务时，是否每一步都执行完成。如果有错误，这里会记录错误，并在网页上反馈给用户。
    deploy_status = models.CharField(max_length=128, blank=True, null=True, verbose_name="发布状态（Err,Suc）")
